/**
 * Created by zhaoyuan on 14-2-18.
 */

Ext.onReady(function(){
    var default_auto="1";
    Ext.QuickTips.init();

    var roleToolBar=new Ext.Toolbar({
        items:[
            '-',{
                text:'新增',
                handler:function(){
                    Ext.getCmp("roleWin_id").setValue("");
                    Ext.getCmp("roleWin_name").setValue("");
                    roleWin.setTitle("添加角色");
                    roleWin.show();
                }
            },'-',{
                xtype:'splitbutton',
                text:'管理',
                menu: new Ext.menu.Menu({
                    items: [
                        {
                            text:'编辑',
                            handler:function(){
                                var selNode=roleList.getSelectionModel().selNode;
                                if(selNode==null){
                                    Ext.Msg.alert("提示","没有选中任何角色！");
                                }else{
                                    if(selNode.leaf){
                                        Ext.getCmp("roleEdit_form").getForm().reset();
                                        Ext.getCmp("roleWin_id").setValue(selNode.id);
                                        Ext.getCmp("roleWin_name").setValue(selNode.text);
                                        roleWin.setTitle("编辑角色");
                                        roleWin.show();
                                    }else{
                                        Ext.Msg.alert("提示","该角色无法编辑！");
                                    }
                                }
                            }
                        }, '-',{
                            text:'删除',
                            handler:function(){
                                var selNode=roleList.getSelectionModel().selNode;
                                if(selNode==null){
                                    Ext.Msg.alert("提示","没有选中任何角色！");
                                }else{
                                    if(selNode.leaf){
                                        Ext.Ajax.request( {
                                            url : 'DeleteAction.action',
                                            params : {
                                                id : selNode.id,
                                                type : 'role'
                                            },
                                            success : function(response, options) {
                                                Ext.Msg.alert('提示', '删除成功！');
                                                roleList_root.reload();
                                            },
                                            failure : function(response, options) {
                                                Ext.Msg.alert('提示', '删除失败！');
                                            }
                                        });
                                    }else{
                                        Ext.Msg.alert("提示","该角色无法编辑！");
                                    }
                                }
                            }
                        }
                    ]
                })
            },'-',{
                xtype:'splitbutton',
                text:'授权',
                menu: new Ext.menu.Menu({
                    items: [
                        {
                            action: 'verify_success',
                            text: '查看权限',
                            handler:function(){
                                authority("1");
                            }
                        }, {
                            action: 'verify_failure',
                            text: '查看和录入权限',
                            handler:function(){
                                authority("2");
                            }
                        }
                    ]
                })
            },'-'
        ]
    });

    var userToolBar=new Ext.Toolbar({
        items:[
            '-',{
                text:'添加用户',
                handler:function(){
                    addUserWin.show();
                    var roleid=roleList.getSelectionModel().selNode.id;
                    UserListStore.load({
                        params:{
                            roleid:roleid
                        }
                    })
                }
            },'-',{
                text:'移除用户',
                handler:function(){
                    var selList=UserGrid.getSelectionModel().getSelections();
                    var userList=[];
                    if(selList!=null){
                        for(var i=0;i<selList.length;i++){
                            userList.push(selList[i].data.USERID);
                        }
                        Ext.Ajax.request( {
                            url : 'RoleAction!deleteUser.action',
                            params : {
                                userid:userList
                            },
                            success : function(response, options) {
                                Ext.Msg.alert('提示', '删除成功！');
                                store2.reload();
                            },
                            failure : function(response, options) {
                                Ext.Msg.alert('提示', '删除失败！');
                            }
                        });
                    }else {
                        Ext.Msg.alert("提示","请选择用户")
                    }

                }
            },'-'
        ]
    });

    var roleList_root = new Ext.tree.AsyncTreeNode({
        text : '角色列表',
        leaf:false,
        id : 'root'
    });
    var roleList = new Ext.tree.TreePanel({
        border:'0',
        height: 900,
        id:'roleList',
        useArrows:true,     //使用箭头
        autoScroll:true,    //自动滚动
        animate:true,       // 动画
        enableDD:false,      //可拖动
        containerScroll: true,
        rootVisible: true,
        root : roleList_root,
        autoScroll : true,
        listeners: {
            beforeload: function(node) {
                var openUrl =  'RoleListJson.action'
                node.loader = new Ext.tree.TreeLoader({
                    dataUrl : openUrl
                });
            }
        }
    });

    roleList.on({
        click:function(node){
           if(node.leaf){
               store2.load({
                   params:{
                       roleid:node.id
                   }
               })
           }
        }
    })

    var store2 = new Ext.data.Store( {
        proxy : new Ext.data.HttpProxy( {
            url : 'RoleJson!getUserList.action'
        }),
        reader : new Ext.data.JsonReader( {
            root : 'data',
            totalProperty : 'totalCount',
            fields : [ {
                name : 'NAME'
            }, {
                name : 'PASSWORD'
            },{
                name:'USERID'
            },{
                name:'USERNAME'
            }]
        })
    });
    var sm = new Ext.grid.CheckboxSelectionModel( {

    });

    var cm = new Ext.grid.ColumnModel( [ sm, {
        header : '编号',
        sortable : true,
        hidden : true,
        dataIndex : 'USERID'
    }, {
        header : '用户名',
        sortable : true,
        width : 50,
        dataIndex : 'NAME'
    }, {
        header : '姓名',
        sortable : true,
        dataIndex : 'USERNAME'
    } ]);

    var UserGrid = new Ext.grid.GridPanel( {
        id : 'refuel_grid',
        store : store2,
        anchor : '100% -60',
        viewConfig : {
            forceFit : true
        },
        sm : sm,
        cm : cm,
        frame : true,
        columnLines : true,
        autoWidth : true,
        loadMask : true,// 数据加载时的遮罩功能
        stateful : true,
        stateId : 'grid',
        bbar: new Ext.PagingToolbar({
            store: store2,
            emptyMsg: '无数据',
            displayInfo: true
        })
    });

    var UserListStore = new Ext.data.Store( {
        proxy : new Ext.data.HttpProxy( {
            url : 'RoleJson!getAllUsers.action'
        }),
        reader : new Ext.data.JsonReader( {
            fields : [ {
                name : 'NAME'
            }, {
                name : 'PASSWORD'
            },{
                name:'USERID'
            },{
                name:'USERNAME'
            },{
                name:'ROLEID'
            }]
        })
    });
    var user_sm = new Ext.grid.CheckboxSelectionModel( {

    });

    var user_cm = new Ext.grid.ColumnModel( [ user_sm, {
        header : '编号',
        sortable : true,
        hidden : true,
        dataIndex : 'USERID'
    }, {
        header : '用户名',
        sortable : true,
        width : 50,
        dataIndex : 'NAME'
    }, {
        header : '姓名',
        sortable : true,
        dataIndex : 'USERNAME'
    },{
        hidden:true,
        dataIndex:'ROLEID',
        renderer:function(value,cellmeta,record,rowIndex){
            var roleid=roleList.getSelectionModel().selNode.id;
            if(value==roleid){
                user_sm.selectRow(rowIndex,true);
            }
        }
    } ]);

    var UserListGrid = new Ext.grid.GridPanel( {
        store : UserListStore,
        anchor : '100% -60',
        viewConfig : {
            forceFit : true
        },
        tbar:new Ext.Toolbar({
            items:[{
                text:'确定',
                handler:function(){
                    var sel=UserListGrid.getSelectionModel().getSelections();
                    var roleid=roleList.getSelectionModel().selNode.id;
                    if(sel!=null){
                        var array=[];
                        for(var i=0;i<sel.length;i++){
                            array.push(sel[i].data.USERID)
                        }
                        Ext.Ajax.request( {
                            url : 'RoleAction!addUsers.action',
                            params : {
                                roleid : roleid,
                                userid : array
                            },
                            success : function(response, options) {
                                Ext.Msg.alert('提示', '添加成功！');
                                addUserWin.hide();
                                store2.reload();
                            },
                            failure : function(response, options) {
                                Ext.Msg.alert('提示', '添加失败！');
                            }
                        });
                    }else{
                        Ext.Msg.alert("提示","没有选择任何权限！");
                    }
                }
            },{
                text:'取消',
                handler:function(){
                    addUserWin.hide();
                }
            }]
        }),
        sm : user_sm,
        cm : user_cm,
        frame : true,
        columnLines : true,
        autoWidth : true,
        loadMask : true,// 数据加载时的遮罩功能
        stateful : true
    });


    var viewPort=new Ext.Viewport({
       layout:'border',
        items:[
            {
                region:'center',
                title:'用户列表',
                tbar:userToolBar,
                layout:'fit',
                items:[UserGrid]
            },{
                title:'角色列表',
                region:'west',
                width:'25%',
                tbar:roleToolBar,
                layout:'fit',
                items:[roleList]
            }]
    });

    /**
     * 新增或编辑角色对话框
     * @type {Ext.Window}
     */
    var roleWin=new Ext.Window({
        closeAction:'hide',
        width:300,
        height:130,
        layout:'fit',
        items:[
            new Ext.FormPanel({
                labelWidth : 75,
                id:'roleEdit_form',
                url : '',
                frame : true,
                title : '',
                width : '100%',
                bodyStyle : 'padding:5px 5px 0',
                items : [ {
                    xtype : 'hidden',
                    id:'roleWin_id',
                    name : 'ID'
                }, {
                    xtype : 'textfield',
                    fieldLabel : '角色名称',
                    name : 'NAME',
                    id:'roleWin_name',
                    allowBlank : false
                }]
            })],
        buttons : [ {
            text : '保存',
            handler:function(){
                var form=Ext.getCmp("roleEdit_form").getForm();
                if(form.isValid()){
                    form.submit( {
                        url : 'RoleAction.action',
                        waitMsg : '数据保存中...',
                        submitEmptyText : false,
                        success : function(c, d) {
                            Ext.MessageBox.alert("操作信息", "成功信息保存！");
                            form.reset();
                            roleList_root.reload();
                        },
                        failure : function(c, d) {
                            Ext.MessageBox.show( {
                                title : "操作信息",
                                msg : "信息保存出错，请联系管理员！",
                                buttons : Ext.MessageBox.OK,
                                icon : "ext-mb-error"
                            });
                        }
                    });
                }else{
                    Ext.MessageBox.alert("提示","请检查填写是否完整！")
                }
            }
        }, {
            text : '关闭',
            scope:this,
            handler : function() {
                Ext.getCmp("roleEdit_form").getForm().reset();
                roleWin.hide();
            }
        } ]
    });

    var accessStore = new Ext.data.Store( {
        proxy : new Ext.data.HttpProxy( {
            url : 'RoleJson!getAccessList.action'
        }),
        reader : new Ext.data.JsonReader( {
            fields : [ {
                name : 'ID'
            },{
                name : 'NAME'
            }, {
                name : 'URL'
            },{
                name:'ROLEID'
            },{
                name:'LEAVEL'
            }]
        })
    });
    var access_sm = new Ext.grid.CheckboxSelectionModel( {

    });

    var access_cm = new Ext.grid.ColumnModel( [ access_sm, {
        header : '编号',
        sortable : true,
        hidden : true,
        dataIndex : 'ID'
    }, {
        header : '菜单名称',
        sortable : true,
        width : 50,
        dataIndex : 'NAME'
    }, {
        header : '角色ID',
        sortable : true,
        hidden : true,
        dataIndex : 'LEAVEL',
        renderer:function(value,cellmeta,record,rowIndex){
            if(value==default_auto){
                access_sm.selectRow(rowIndex,true);
            }
        }
    } ]);

    var AccessGrid = new Ext.grid.GridPanel( {
        id : 'access_grid',
        store : accessStore,
        tbar:new Ext.Toolbar({
           items:[{
               text:'确定',
               handler:function(){
                   var sel=AccessGrid.getSelectionModel().getSelections();
                   var roleid=roleList.getSelectionModel().selNode.id;
                   if(sel!=null){
                       var array=[];
                       for(var i=0;i<sel.length;i++){
                           array.push(sel[i].data.ID)
                       }
                       Ext.Ajax.request( {
                           url : 'RoleAction!setRoleUser.action',
                           params : {
                               roleid : roleid,
                               type:default_auto,
                               access : array
                           },
                           success : function(response, options) {
                               Ext.Msg.alert('提示', '添加成功！');
                               authority_win.hide();
                           },
                           failure : function(response, options) {
                               Ext.Msg.alert('提示', '添加失败！');
                           }
                       });
                   }else{
                       Ext.Msg.alert("提示","没有选择任何权限！");
                   }
               }
           },{
               text:'取消',
               handler:function(){
                   authority_win.hide();
               }
           }]
        }),
        anchor : '100% -60',
        viewConfig : {
            forceFit : true
        },
        sm : access_sm,
        cm : access_cm,
        frame : true,
        columnLines : true,
        autoWidth : true,
        loadMask : true,
        stateful : true
    });

    /**
     * 角色授权的对话框
     * @type {Ext.Window}
     */
  var authority_win=new Ext.Window({
     title:'角色授权',
       closeAction:'hide',
      layout:'fit',
        width:600,
        height:400,
      items:[AccessGrid]
  });

    var addUserWin=new Ext.Window({
        title:'添加用户',
        closeAction:'hide',
        layout:'fit',
        width:600,
        height:400,
        items:[UserListGrid]
    });

    /**
     * 角色授权
     * @param index
     */
    function authority(index){
        default_auto=index;
        var selNode=roleList.getSelectionModel().selNode;
        if(selNode==null){
            Ext.Msg.alert("提示","没有选中任何角色！");
        }else{
            if(selNode.leaf){
                authority_win.show();
                accessStore.load({
                    params:{
                        roleid:selNode.id
                    }
                });
            }else{
                Ext.Msg.alert("提示","该角色无法编辑！");
            }
        }
    }

});